package com.tanhua.server.service;

import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.tanhua.domain.db.PageResult;
import com.tanhua.domain.db.UserInfo;
import com.tanhua.domain.mg.Friend;
import com.tanhua.domain.mg.TodayBeautyMG;
import com.tanhua.domain.vo.FriendVo;
import com.tanhua.domain.vo.UserLikeNum;
import com.tanhua.dubbo.api.FriendApi;
import com.tanhua.dubbo.api.UserInfoApi;
import com.tanhua.dubbo.mg.UserLikeNumApi;
import com.tanhua.server.utils.ThreadLocalUtils;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

@Service
public class UserLikeNumService {

    //订阅UserLikeNumAPi
    @Reference
    private UserLikeNumApi  userLikeNumApi;
    //订阅FriendApi
    @Reference
    private FriendApi friendApi;
    //订阅userInfoAPi
    @Reference
    private UserInfoApi userInfoApi;
    //注入ThreadLocalUtils
    @Autowired
    private ThreadLocalUtils threadLocalUtils;


    /**
     * 互相喜欢，喜欢，粉丝 - 统计
     */
    public UserLikeNum countTheNumberOfLikes() {
        //a.获取当前用户的Id值
        Long currentUserId = threadLocalUtils.getUserId();
        //b.调用UserLikeApi 查询好友数量
        Integer friendCount= friendApi.countFriend(currentUserId);
        //c.调用UserLikeApi 查询喜欢数
        Integer myLikeCount= userLikeNumApi.countMyLike(currentUserId);
        //d.调用UserLikeApi 查询粉丝数
        Integer likeMeCount= userLikeNumApi.countLikeMe(currentUserId);
        //e.封装返回
        return new UserLikeNum(friendCount,myLikeCount,likeMeCount);
    }
    /**
     * 互相喜欢、喜欢、粉丝、谁看过我 - 翻页列表
     */
    public PageResult<FriendVo> findPageUserLikeNum(Integer type, Integer page, Integer pagesize) {
        //a.获取当前用户的id
        Long currentUserId= threadLocalUtils.getUserId();
        PageResult<TodayBeautyMG> recommendPageResult = new PageResult<>();
        //创建一个集合 存储Friend对象
        ArrayList<FriendVo> FriendlyList = new ArrayList<>();
        //b.根据传入的type类型 使用swith方式 可以调用不同的场景 返回的pageResult<TodayBeanutyMg>
        switch (type){
            //互相喜欢的列表数据（个人信息--缘分值）
            case 1:
                recommendPageResult= userLikeNumApi.findFriendScoreAndData(currentUserId,page,pagesize);
                break;
            //我喜欢的佳人列表数据（个人信息--缘分值）
            case 2:
                recommendPageResult= userLikeNumApi.findMyLikeScoreAndData(currentUserId,page,pagesize);
                break;
            //喜欢我的佳人列表数据（个人信息--缘分值）
            case 3:
                recommendPageResult= userLikeNumApi.findLikeMeScoreAndData(currentUserId,page,pagesize);
                break;
            //访问过我的佳人列表数据（个人信息--缘分值）
            case 4:
                recommendPageResult= userLikeNumApi.findVisitorMeScoreAndData(currentUserId,page,pagesize);
                break;

        }
        //c.判断非空 遍历pageResult.getItems集合
        if (recommendPageResult!=null&& CollectionUtils.isNotEmpty(recommendPageResult.getItems())){
            for (TodayBeautyMG todayBeautyMG : recommendPageResult.getItems()) {
                FriendVo friendVo = new FriendVo();
                //根据recommendQuanzi对象 获取到佳人的用户id
                Long beautyId = todayBeautyMG.getUserId();
                //根据用户id使用userInfo表
                UserInfo userInfo = userInfoApi.findUserInfoByID(beautyId);
                //赋值userInfo信息到vo对象
                BeanUtils.copyProperties(userInfo,friendVo);
                //单独赋值缘分值
                friendVo.setMatchRate(todayBeautyMG.getScore().intValue());
                //将对象添加到集合中
                FriendlyList.add(friendVo);
            }
            //g.封装pageResult对象
            PageResult<FriendVo> voPageResult = new PageResult<>();
            BeanUtils.copyProperties(recommendPageResult,voPageResult);
            voPageResult.setItems(FriendlyList);
            //h.返回分页数据
            return voPageResult;
        }
        return null;
    }
    /**
     * 粉丝 - 喜欢点击转换好友关系
     */
    public void becomeFriendsWithFans(Long fansId) {
        //a.获取当前的用户id
        Long currentUserId = threadLocalUtils.getUserId();
        //b.根据当前用户id和粉丝id查询喜欢表 并删除对应的关系
        userLikeNumApi.deleteRelation(currentUserId,fansId);
        addTwoWayFriendship(fansId, currentUserId);
        //d.返回....



    }

    /**
     * 添加双向好友的逻辑判断
     * @param fansId
     * @param currentUserId
     */
     void addTwoWayFriendship(Long fansId, Long currentUserId) {
        //a.根据当前用户id和陌生人id 查询好友表
        Friend MyAndFriendRelation = friendApi.queryFriend(currentUserId, fansId);
        //b.如果存在好友关系 那么就再次查询陌生人和当前用户的好友关系
        if (MyAndFriendRelation==null){
            //c.如果不存在那么就直接插入数据
            friendApi.save(currentUserId,fansId);
        }
        //d.如果查询陌生人和当前用户不存在关联
        Friend friendAndMyRelation = friendApi.queryFriend(fansId, currentUserId);
        //e.插入数据
        if(friendAndMyRelation==null){
            //c.如果不存在那么就直接插入数据
            friendApi.save(fansId,currentUserId);
        }
    }
}
